﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entities;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace BLL
{
	public class QLDeXuat
	{
		/// <summary>
		/// Lấy tất cả đề xuất
		/// </summary>
		public static IEnumerable<DeXuat> GetAll()
		{
			return Generic.GetAll<DeXuat>();
		}

		/// <summary>
		/// Thêm đề xuất
		/// </summary>
		public static ActionResult Insert(DeXuat dx)
		{
			TaiKhoan tk=new TaiKhoan();
			ActionResult ac = new ActionResult("Thêm đề xuất");
			//if (dx.MaNguoiGui=="")
			//{
			//    ac.Exceptions.Add(new Exception("Chưa nhập mã người gửi hoặc mã sai"));
			//}
			if (dx.NoiDung == "")
			{
				ac.Exceptions.Add(new Exception("Chưa nhập nội dung đề xuất"));
			}

			try
			{
				if (!Generic.Insert<DeXuat>(dx))
				{
					ac.Exceptions.Add(new Exception("Lỗi"));
				}
			}
			catch(Exception ex)
			{
				ac.Exceptions.Add(ex);
			}
			return ac;
		}

		/// <summary>
		/// Xóa đề xuất
		/// </summary>
		public static int Delete(DeXuat dx)
		{
			
			return Generic.DeleteByCondition<DeXuat>(dx1 => dx1.MaNguoiGui == dx.MaNguoiGui);
		}

		/// <summary>
		/// Xóa tất cả đề xuất
		/// </summary>
		public static int DeleteAll(IEnumerable<DeXuat> ps)
		{
			return Generic.DeleteByCondition<DeXuat>(dx => ps.Where(x => x.MaNguoiGui == dx.MaNguoiGui).Count() == 1);
		}

		/// <summary>
		/// Lựa chọn xóa theo thuộc tính đề xuất
		/// </summary>
		public static bool DeleteByID(int madexuat)
		{
			return Generic.DeleteByCondition<DeXuat>(x => x.MaDX == madexuat) > 0;

		}
		
		/// <summary>
		/// Cập nhật đề xuất
		/// </summary>
		public static int Update(DeXuat dx)
		{
			return Generic.EditByCondition<DeXuat>(k => k.MaNguoiGui == dx.MaNguoiGui, k =>
			{
				k.MaNguoiGui = dx.MaNguoiGui;
				k.NoiDung = dx.NoiDung;
			});
		}

		/// <summary>
		/// Tìm theo điều kiện
		/// </summary>
		public static IEnumerable<DeXuat> FindByCondition(Func<DeXuat, bool> func)
		{
			return Generic.FindByCondition<DeXuat>(func);
		}

		public enum DKTimKiem
		{
			MaDX = 0,
			MaNguoiGui,
			NoiDung,
		};

		public static void TimKiem(DKTimKiem dk, DataGridView drv, string dktk)
		{
			try
			{
				switch (dk)
				{
					case DKTimKiem.MaDX:
						drv.DataSource = FindByCondition(x => Regex.IsMatch(x.MaDX.ToString().ToLower(), dktk.ToLower()));
						break;
					case DKTimKiem.MaNguoiGui:
						drv.DataSource = FindByCondition(x => Regex.IsMatch(x.MaNguoiGui.ToString().ToLower(), dktk.ToLower()));
						break;
					case DKTimKiem.NoiDung:
						drv.DataSource = FindByCondition(x => Regex.IsMatch(x.NoiDung.ToString().ToLower(), dktk.ToLower()));
						break;
					default:
						break;
				}
			}
			catch (Exception ex)
			{
				MessageBox.Show(ex.Message);
			}
		}
	}
}
